package cn.shyouchi.wuguanjia.android.api.event;

import java.util.List;
import java.util.Map;

import cn.shyouchi.wuguanjia.android.model.BaseRequestResult;
import cn.shyouchi.wuguanjia.android.model.OwnerEntity;
import cn.shyouchi.wuguanjia.android.ui.event.EventEntity;
import cn.shyouchi.wuguanjia.android.ui.event.arrange.ArrangeEntity;
import cn.shyouchi.wuguanjia.android.ui.event.arrange.RemoteArrangeEntity;
import cn.shyouchi.wuguanjia.android.ui.event.check.CheckEntity;
import cn.shyouchi.wuguanjia.android.ui.event.checknum.CheckNumEntity;
import cn.shyouchi.wuguanjia.android.ui.event.checknum.CheckNumLineEntity;
import cn.shyouchi.wuguanjia.android.ui.event.checkpoint.CheckPointEntity;
import cn.shyouchi.wuguanjia.android.ui.event.handover.HandoverEntity;
import cn.shyouchi.wuguanjia.android.ui.event.labor.AllotPersonEntity;
import cn.shyouchi.wuguanjia.android.ui.event.labor.ApplyLaborEntity;
import cn.shyouchi.wuguanjia.android.ui.event.labor.LaborRequestEntity;
import cn.shyouchi.wuguanjia.android.ui.event.labor.PersonRank;
import cn.shyouchi.wuguanjia.android.ui.event.labor.RankTime;
import cn.shyouchi.wuguanjia.android.ui.event.meet.EventMeetEntity;
import cn.shyouchi.wuguanjia.android.ui.event.post.PostEntity;
import cn.shyouchi.wuguanjia.android.ui.event.rank.EventRankEntity;
import cn.shyouchi.wuguanjia.android.ui.event.report.ReportEntity;
import cn.shyouchi.wuguanjia.android.ui.event.temporary.TemporaryEntity;
import cn.shyouchi.wuguanjia.android.ui.event.train.TrainEntity;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.Query;
import rx.Observable;

/**
 * Created by Eenie on 2016/11/14 at 13:39
 * Email: 472279981@qq.com
 * Des:
 */

public interface EventService {
    /**
     * 添加业主方信息
     *
     * @param token
     * @param id
     * @param name
     * @param age
     * @param height
     * @param job
     * @param sex
     * @param workinghours
     * @param numberplates
     * @param remarks
     * @param img
     * @return
     */

    @Multipart
    @POST("ownerAdd")
    Observable<BaseRequestResult> addOwner(@Header("token") String token,
                                           @Part("projectsId") RequestBody id,
                                           @Part("name") RequestBody name,
                                           @Part("age") RequestBody age,
                                           @Part("height") RequestBody height,
                                           @Part("job") RequestBody job,
                                           @Part("sex") RequestBody sex,
                                           @Part("workinghours") RequestBody workinghours,
                                           @Part("numberplates") RequestBody numberplates,
                                           @Part("remarks") RequestBody remarks,
                                           @Part MultipartBody.Part img);
    @Multipart
    @POST("ownerAdd")
    Observable<BaseRequestResult> addOwner(@Header("token") String token,
                                           @PartMap() Map<String, RequestBody> params,
                                           @Part MultipartBody.Part img);


    /**
     * 删除业主
     *
     * @param token
     * @param id
     * @return
     */
    @GET("ownerDelete")
    Observable<BaseRequestResult> delOwner(@Header("token") String token, @Query("id") String id);

    @Multipart
    @POST("ownerUpdate")
    Observable<BaseRequestResult> upOwner(@Header("token") String token,
                                          @PartMap() Map<String, RequestBody> params,
                                          @Part MultipartBody.Part img);

    /**
     * 获取业主列表
     *
     * @param token
     * @param id
     * @return
     */
    @GET("ownerIndexList")
    Observable<OwnerEntity> getOwnerList(@Header("token") String token, @Query("projectsid") String id);

    /**
     * 获取项目列表
     *
     * @param token
     * @return
     */
    @GET("projectsList")
    Observable<EventEntity> getProjectList(@Header("token") String token);


    @GET("precautionList")
    Observable<HandoverEntity> getPrecautionList(@Header("token") String token, @Query("projectid") String id);

    @Multipart
    @POST("precautionAdd")
    Observable<BaseRequestResult> addPrecaution(@Header("token") String token,
                                                @PartMap() Map<String, RequestBody> pa,
                                                @Part List<MultipartBody.Part> imgs);


    @Multipart
    @POST("precautionUpdate")
    Observable<BaseRequestResult> upPrecaution(@Header("token") String token,
                                               @PartMap() Map<String, RequestBody> params,
                                               @Part List<MultipartBody.Part> imgs);

    @GET("precautionDelete")
    Observable<BaseRequestResult> delPrecaution(@Header("token") String token, @Query("id") String id);


    @GET("postList")
    Observable<PostEntity> getPostList(@Header("token") String token, @Query("projectid") String id);


    @GET("postDelete")
    Observable<BaseRequestResult> delPost(@Header("token") String token, @Query("id") String id);


    @FormUrlEncoded
    @POST("postAdd")
    Observable<BaseRequestResult> addPost(@Header("token") String token,
                                          @FieldMap Map<String, String> params);

    @FormUrlEncoded
    @POST("postUpdate")
    Observable<BaseRequestResult> upPost(@Header("token") String token,
                                         @FieldMap Map<String, String> params);


    @Multipart
    @POST("jobtrainingAdd")
    Observable<BaseRequestResult> addTrain(@Header("token") String token,
                                           @PartMap() Map<String, RequestBody> pa,
                                           @Part List<MultipartBody.Part> imgs);

    @Multipart
    @POST("jobtrainingUpdate")
    Observable<BaseRequestResult> upTrain(@Header("token") String token,
                                          @PartMap() Map<String, RequestBody> pa,
                                          @Part List<MultipartBody.Part> imgs);

    @GET("jobtrainingDelete")
    Observable<BaseRequestResult> delTrain(@Header("token") String token, @Query("id") String id);


    @GET("jobtrainingList")
    Observable<TrainEntity> getTrain(@Header("token") String token, @Query("projectid") String id);


    @GET("serviceList")
    Observable<ArrangeEntity> getArrangeList(@Header("token") String token, @Query("projectid") String id);


    @FormUrlEncoded
    @POST("jobtrainingAdd")
    Observable<BaseRequestResult> addArrange(@Header("token") String token, @FieldMap Map<String, String> params);

    @GET("serviceDelete")
    Observable<BaseRequestResult> delArrange(@Header("token") String token, @Query("id") String id);


    @GET("serviceList")
    Observable<EventRankEntity> getRankList(@Header("token") String token, @Query("projectid") String id);


    @FormUrlEncoded
    @POST("serviceAdd")
    Observable<BaseRequestResult> addRank(@Header("token") String token, @FieldMap Map<String, String> params);

    @FormUrlEncoded
    @POST("serviceUpdate")
    Observable<BaseRequestResult> upRank(@Header("token") String token, @FieldMap Map<String, String> params);

    @GET("serviceDelete")
    Observable<BaseRequestResult> delRank(@Header("token") String token, @Query("id") String id);

    @FormUrlEncoded
    @POST("proinsuranceAdd")
    Observable<BaseRequestResult> addTemporary(@Header("token") String token, @FieldMap Map<String, String> params);

    @FormUrlEncoded
    @POST("proinsuranceUpdate")
    Observable<BaseRequestResult> upTemporary(@Header("token") String token, @FieldMap Map<String, String> params);

    @GET("proinsuranceList")
    Observable<TemporaryEntity> getTemporaryList(@Header("token") String token, @Query("projectid") String id);

    @GET("proinsuranceDelete")
    Observable<BaseRequestResult> delTemporary(@Header("token") String token, @Query("id") String id);

    @FormUrlEncoded
    @POST("attendanceAdd")
    Observable<BaseRequestResult> addCheck(@Header("token") String token, @FieldMap Map<String, String> params);

    @FormUrlEncoded
    @POST("attendanceUpdate")
    Observable<BaseRequestResult> upCheck(@Header("token") String token, @FieldMap Map<String, String> params);


    @GET("attendanceList")
    Observable<CheckEntity> getCheckList(@Header("token") String token, @Query("projectid") String id);

    @GET("inspectionpointsList")
    Observable<CheckPointEntity> getPointList(@Header("token") String token, @Query("projectid") String id);


    @Multipart
    @POST("inspectionpointsAdd")
    Observable<BaseRequestResult> addPoint(@Header("token") String token,
                                           @PartMap() Map<String, RequestBody> params,
                                           @Part List<MultipartBody.Part> imgs);

    @Multipart
    @POST("inspectionpointsUpdate")
    Observable<BaseRequestResult> upPoint(@Header("token") String token,
                                          @PartMap() Map<String, RequestBody> params,
                                          @Part List<MultipartBody.Part> imgs);

    @Multipart
    @POST("inspectionpointsSort")
    Observable<BaseRequestResult> sortPoint(@Header("token") String token,
                                            @Part List<MultipartBody.Part> imgs);

    @GET("inspectionpointsDelete")
    Observable<BaseRequestResult> delPoint(@Header("token") String token, @Query("id") String id);


    @GET("classmeetingList")
    Observable<EventMeetEntity> getMeetList(@Header("token") String token, @Query("projectid") String id);


    @Multipart
    @POST("classmeetingAdd")
    Observable<BaseRequestResult> addMeet(@Header("token") String token,
                                          @PartMap() Map<String, RequestBody> params,
                                          @Part List<MultipartBody.Part> imgs);

    @GET("classmeetingDelete")
    Observable<BaseRequestResult> delMeet(@Header("token") String token, @Query("id") String id);


    @GET("newspaperpostList")
    Observable<ReportEntity> getReportList(@Header("token") String token, @Query("projectid") String id);

    @FormUrlEncoded
    @POST("newspaperpostAdd")
    Observable<BaseRequestResult> addReport(@Header("token") String token,
                                            @FieldMap Map<String, String> params);

    @FormUrlEncoded
    @POST("newspaperpostUpdate")
    Observable<BaseRequestResult> upReport(@Header("token") String token,
                                           @FieldMap Map<String, String> params);

    @GET("newspaperpostDelete")
    Observable<BaseRequestResult> delReport(@Header("token") String token, @Query("id") String id);

   @FormUrlEncoded
    @POST("inspectiondayAdd")
    Observable<BaseRequestResult> addPointNum(@Header("token") String token,
                                              @Field("data") String data);

    @FormUrlEncoded
    @POST("inspectiondayUpdate")
    Observable<BaseRequestResult> upPointNum(@Header("token") String token,

                                             @Field("data") String data);

    @GET("lineList")
    Observable<CheckNumLineEntity> getCheckNumList(@Header("token") String token, @Query("projectid") String id);


    @GET("inspectiondayList")
    Observable<CheckNumEntity> getCheckNumLineList(@Header("token") String token, @Query("lineid") String id);

    @GET("inspectiondayDelete")
    Observable<BaseRequestResult> delCheckNum(@Header("token") String token, @Query("id") String id);


    @FormUrlEncoded
    @POST("lineAdd")
    Observable<BaseRequestResult> addCheckNumLine(@Header("token") String token,
                                                  @FieldMap Map<String, Object> params);

    @FormUrlEncoded
    @POST("lineUpdata")
    Observable<BaseRequestResult> upCheckNumLine(@Header("token") String token,
                                                  @FieldMap Map<String, Object> params);

    @GET("lineDelete")
    Observable<BaseRequestResult> delCheckNumLine(@Header("token") String token, @Query("id") String id);


    @Multipart
    @POST("hoursAdd")
    Observable<BaseRequestResult> addLabor(@Header("token") String token,
                                           @Part List<MultipartBody.Part> params);

    @GET("hoursDelete")
    Observable<BaseRequestResult> delLabor(@Header("token") String token, @Query("id") String id);

    @Multipart
    @POST("hoursUpdate")
    Observable<BaseRequestResult> upLabor(@Header("token") String token,
                                          @Part List<MultipartBody.Part> params);

    @FormUrlEncoded
    @POST("applicationAdd/hours")
    Observable<BaseRequestResult> applyLabor(@Header("token") String token,
                                             @FieldMap Map<String, Object> params);

    @GET("personalHours/applicationList")
    Observable<ApplyLaborEntity> getApplyLborList(@Header("token") String token, @Query("projectid") String id, @Query("date") String date);

    @GET("hoursTimeList/service")
    Observable<RankTime> gethoursTimeList(@Header("token") String token, @Query("projectid") String id);


    @GET("hoursList")
    Observable<LaborRequestEntity> getLaborList(@Header("token") String token, @Query("projectid") String id, @Query("date") String date);


    /**
     * 获取个人工时用户列表
     *
     * @param token
     * @param id
     * @return
     */
    @GET("personalHours/UserList")
    Observable<AllotPersonEntity> getLaborUserList(@Header("token") String token, @Query("projectid") String id, @Query("date") String date);


    /**
     * 获取个人工时用户列表
     *
     * @param token
     * @param id
     * @return
     */
    @GET("personalHoursList")
    Observable<PersonRank> getPersonalHourslist(@Header("token") String token, @Query("projectid") String id, @Query("date") String date);


    @Multipart
    @POST("personalHoursAdd")
    Observable<BaseRequestResult> addPersonalHours(@Header("token") String token,
                                                   @Part List<MultipartBody.Part> params);

    @FormUrlEncoded
    @POST("schedulingAdd")
    Observable<BaseRequestResult> schedulingAdd(@Header("token") String token,
                                                @Field("projectid") String id,
                                                @Field("info") String data);

    /**
     * 获取个人工时用户列表
     *
     * @param token
     * @param id
     * @return
     */
    @GET("schedulingList")
    Observable<RemoteArrangeEntity> getschedulingList(@Header("token") String token, @Query("projectid") String id, @Query("date") String date);
}
